package Lista;

import java.util.*;
import Personas.*;

public class Agenda {
	List<Persona> per = new LinkedList<Persona>();
	List<Empleado> emp = new LinkedList<Empleado>();
	List<Cliente> cli = new LinkedList<Cliente>();
	List<Proveedor> pro = new LinkedList<Proveedor>();

	public void alta(Persona pe) {
		boolean res = existe(pe);
		System.out.println("res: " + res);
		if (res == false) {
			per.add(pe);
			System.out.println("Alta ok");
		}
	}
	public void alta(Empleado pe) {
		boolean res = existe(pe);
		System.out.println("res: " + res);
		if (res == false) {
			emp.add(pe);
			System.out.println("Alta ok");
		}
	}
	public void alta(Cliente pe) {
		boolean res = existe(pe);
		System.out.println("res: " + res);
		if (res == false) {
			cli.add(pe);
			System.out.println("Alta ok");
		}
	}
	public void alta(Proveedor pe) {
		boolean res = existe(pe);
		System.out.println("res: " + res);
		if (res == false) {
			pro.add(pe);
			System.out.println("Alta ok");
		}
	}

	public void baja(Persona p) {
		if (per.contains(p)) {
			System.out.println("Baja de " + p);
			per.remove(p);
		} else {
			System.out.println("Esta persona no esta en la BD");
		}
	}
	public void baja(Empleado p) {
		if (emp.contains(p)) {
			System.out.println("Baja de " + p);
			emp.remove(p);
		} else {
			System.out.println("Este empleado no esta en la BD");
		}
	}
	public void baja(Cliente p) {
		if (cli.contains(p)) {
			System.out.println("Baja de " + p);
			cli.remove(p);
		} else {
			System.out.println("Este cliente no esta en la BD");
		}
	}
	public void baja(Proveedor p) {
		if (pro.contains(p)) {
			System.out.println("Baja de " + p);
			pro.remove(p);
		} else {
			System.out.println("Este proveedor no esta en la BD");
		}
	}
	
	public boolean existe(Object p) 
	{
		boolean res = false;
		if (p instanceof Persona)
		{
			Persona o = (Persona)p;
			Iterator it = per.iterator();
			while (it.hasNext())
			{
			Persona px = (Persona) it.next();
			if (px.getNif().equals(o.getNif())) 
			{
				res = true;
				System.out.println("Esta perona o empresa existe");
			} 
			}
		}
		if (p instanceof Empleado)
		{
			Empleado o = (Empleado)p;
			Iterator it = per.iterator();
			while (it.hasNext())
			{
			Persona px = (Empleado) it.next();
			if (px.getNif().equals(o.getNif())) 
			{
				res = true;
				System.out.println("Este empleado existe");
			} 
			}
		}
		if (p instanceof Proveedor)
		{
			Proveedor o = (Proveedor)p;
			Iterator it = per.iterator();
			while (it.hasNext())
			{
			Persona px = (Proveedor) it.next();
			if (px.getNif().equals(o.getNif())) 
			{
				res = true;
				System.out.println("Este proveedor existe");
			} 
			}
		}
		if (p instanceof Cliente)
		{
			Cliente o = (Cliente)p;
			Iterator it = per.iterator();
			while (it.hasNext())
			{
			Persona px = (Cliente) it.next();
			if (px.getNif().equals(o.getNif())) 
			{
				res = true;
				System.out.println("Este cliente");
			} 
			}
		}
		return res;
	}

	
	
	
	
	//Singleton
	private static boolean instanciated = false;

	private static Agenda contactosInstance;

	public static Agenda getInstance() {
		if (Agenda.instanciated)
			Agenda.contactosInstance = new Agenda();
		Agenda.instanciated = true;
		return Agenda.contactosInstance;

	}

}
